/**
 * 1 页面加载的时候
 *  1.1 从缓存中获取购物车数据 渲染到页面中
 *    这些数据 checked = true
 * 2 微信支付
 *  2.1 哪些人 哪些账号 可以实现微信支付
 *     2.1.1 企业账号
 *     2.1.2 企业账号的小程序后台中 必须 给开发者 添加上白名单才可以进行支付操作
 *        2.1.2.1 一个appid 可以同时绑定多个开发者
 *        2.1.2.2 这些开发者就可以公用这个appid 和 它的开发权限
 * 3 支付按钮
 *  3.1 先判断缓存中有没有token
 *  3.2 没有token 跳转到授权页面进行获取token
 *  3.3 有token就继续
 *  3.4 创建订单 获取订单编号
 *  3.5 已经完成了微信支付
 *  3.6 手动删除缓存中 已经被选中的商品(既然选中的商品已经支付完成，则没有必要存在于缓存中)
 *  3.7 删除后的购物车数据 重新填充回缓存中
 *  3.8 再跳转页面
 */
import {getSetting,chooseAddress,openSetting,showModal,showToast,requestPayment} from '../../utils/asyncWx.js';
import regeneratorRuntime from '../../lib/runtime/runtime';
import {request} from '../../request/index.js';
Page({
  data: {
    address: {},
    cart: [],
    totalPrice: 0,
    totalNum: 0
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 2.页面加载完毕
    //   2.1 获取本地存储中的地址数据
    const address = wx.getStorageSync("address")    
    //3.1获取缓存中的购物车数据
    let cart = wx.getStorageSync("cart") || [];
    //过滤后的购物车数组
    cart = cart.filter(v => v.checked)
    // 4.0计算全选
    this.setData({address})

    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v => {
      totalPrice += v.num * v.goods_price
      totalNum += v.num
    })
    //   2.2 把数据 设置给打他中的一个变量   
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address
    })
  },
  //结算功能
  // async handlePay() {
  //   let {address,totalNum} = this.data
  //   //判断收货地址
  //   if (!address.userName) {
  //     await showToast({title: "您还没有选择收货地址"})
  //     return
  //   }
  //   //判断用户有没有选购商品
  //   if (totalNum === 0) {
  //     await showToast({title: "您还没有选购商品"})
  //     return
  //   }
  //   // 跳转到支付页面
  //   wx.navigateTo({
  //     url: '/pages/pay/index'
  //   });
  // }

  //点击支付功能
  async handleOrderPay() {
    try {
      //1 判断缓存中有没有token
      const token = wx.getStorageSync("token")
      //2 判断
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/index'
        })
        return
      }
      //3 创建订单
      //3.1 准备创建订单需要的参数 请求头参数
      // const header = {Authorization:token}
      //3.2 准备请求体参数
      const order_price = this.data.totalPrice
      const consignee_addr = this.data.address.all
      const cart = this.data.cart
      let goods = []
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.number,
        goods_price: v.goods_price
      }))
      const orderParams = {order_price,consignee_addr,goods}
      //4 准备发送请求
      const {order_number} = await request({url: "/my/orders/create",method: "POST",data: orderParams})
      // console.log(order_number);
      //5 发起 预支付接口
      const {pay} = await request({url: "/my/orders/req_unifiedorder",method: "POST",data:{order_number}})
      //6 发起微信支付
      await requestPayment(pay)
      //7 查询后台 订单状态
      const res = await request({url: "/my/orders/chkOrder",method: "POST",data:{order_number}})
      await showToast({title: "支付成功"})
      // 3.6 手动删除缓存中 已经被选中的商品(既然选中的商品已经支付完成，则没有必要存在于缓存中)
      let newCart = wx.getStorageSync("cart")
      newCart = newCart.filter(v => !v.checked)
      wx.setStorageSync("cart", newCart)
        
      //3.7 删除后的购物车数据 重新填充回缓存中
      //3.8 再跳转页面
      wx.navigateTo({
        url: '/pages/order/index'
      })
    } catch (error) {
      await showToast({title: "支付失败"})
      console.log(error)
    }
  }
})
